package com.newtouch.bxzs.business.statistics.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.newtouch.bxzs.business.statistics.model.bo.*;
import com.newtouch.bxzs.business.statistics.model.vo.AchievementMonthlyDetailVO;
import com.newtouch.bxzs.business.statistics.model.vo.AchievementRankingVO;
import com.newtouch.bxzs.business.statistics.model.vo.AchievementSummaryVO;
import com.newtouch.bxzs.common.base.model.UserPolicyAchievement;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 接口规范demo类
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021/1/20</td>
 * <td>tianshangzhu</td>
 * <td>Create</td>
 * </tr>
 * </table>
 *
 * @author tianshangzhu
 * @version 1.0.0
 * @since 1.0.0
 */
@Mapper
public interface PersonalAchievementMapper extends BaseMapper<UserPolicyAchievement> {

	/**
	 * 按月份展示业绩汇总信息
	 * @param achievement 查询条件
	 * @param userJobNumber 用户工号
	 * @return 业绩汇总
	 */
	List<AchievementSummaryBO> getAchievementByMonth(@Param("achievement")AchievementSummaryVO achievement,@Param("userJobNumber") String userJobNumber);

	/**
	 * 按公司展示业绩汇总信息-银行端
	 * @param achievement 查询条件
	 * @param userJobNumber 用户工号
	 * @return 业绩汇总
	 */
	List<AchievementSummaryBO> getAchievementByOrg(@Param("achievement")AchievementSummaryVO achievement,@Param("userJobNumber") String userJobNumber);

	/**
	 * 按公司或月份查询业绩明细-银行
	 * @param page 分页
	 * @param achievementCnd 查询条件
	 * @return List<AchievementPolicyBO>
	 */
	IPage<AchievementPolicyBO> getAchievementPolicyByBank(@Param("page") Page<AchievementPolicyBO> page, @Param("achievementCnd") AchievementMonthlyDetailVO achievementCnd);

	/**
	 * 按公司或月份查询业绩明细-银行
	 * @param page 分页
	 * @param achievementCnd 查询条件
	 * @return List<AchievementPolicyBO>
	 */
	IPage<AchievementPolicyBO> getAchievementPolicyByInsurance(@Param("page") Page<AchievementPolicyBO> page, @Param("achievementCnd") AchievementMonthlyDetailVO achievementCnd);


	/**
	 * 获取业绩保单详细
	 * @param policyNumber 保单号
	 * @return 业绩保单详情
	 */
	AchievementPolicyDetailBO getAchievementPolicyDetail(@Param("policyNumber")String policyNumber);

	/**
	 * 个人业绩排名
	 * 
	 * @param achievementRankingVO
	 *            查询条件
	 * @parm organizationCode 机构编码
	 * @param rank 排名
	 * @return 业绩排名列表
	 */
	List<AchievementRankingBO> getAchievementRank(@Param("achievementRanking") AchievementRankingVO achievementRankingVO,
												  @Param("array")String[] organizationCode,
												  @Param("rank") Integer rank);


	/**
	 * 产品销量排名（全部）
	 * 
	 * @param achievementRanking
	 *            查询条件
	 * @parm organizationCode 机构编码
	 * @param rank 排名
	 * @return 产品销量排名（全部）
	 */
	List<ProductSaleRankingBO> getProductRankingAll(@Param("achievementRanking") AchievementRankingVO achievementRanking,
													@Param("array")String[] organizationCode,
													@Param("rank") Integer rank);

	/**
	 * 获取当前用户所在机构的三级机构下所有机构
	 * @param userJobNumber 用户工号
	 * @return 机构Code
	 */
	String getOrganizationCode(String userJobNumber);
}
